package ufpr.ees.suhck.dao.agendamento;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.hibernate.Query;
import ufpr.ees.suhck.controller.Front;
import ufpr.ees.suhck.dao.GenericDaoImpl;
import ufpr.ees.suhck.db.HibernateUtil;
import ufpr.ees.suhck.model.Agendamento;
import ufpr.ees.suhck.model.SituacaoAtendimento;

public class AgendamentoDaoImpl extends GenericDaoImpl<Agendamento, Long> implements AgendamentoDao {

    public List<Agendamento> findPorSituacao(SituacaoAtendimento situacao) {
        sf = HibernateUtil.getSessionFactory().openSession();
        Query query = sf.getNamedQuery(Agendamento.FIND_POR_SITUACAO);
        query.setParameter("situacao", situacao);
        List<Agendamento> agendamentos = query.list();
        sf.close();
        return agendamentos;
    }

    public List<Agendamento> findPorPaciente(Long idPaciente) {
        sf = HibernateUtil.getSessionFactory().openSession();
        Query query = sf.getNamedQuery(Agendamento.FIND_POR_PACIENTE);
        query.setParameter("paciente", idPaciente);
        List<Agendamento> agendamentos = query.list();
        sf.close();
        return agendamentos;
    }

    public List<Agendamento> findPorData(String dataInicial, String dataFinal) {
        sf = HibernateUtil.getSessionFactory().openSession();
        Query query = sf.getNamedQuery(Agendamento.FIND_POR_DATA);
        dataInicial = dataInicial + " 00:00:00.0";
        dataFinal = dataFinal + " 23:59:59.9";
        try {
            DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
            Date inicio = format.parse(dataInicial);
            Date fim = format.parse(dataFinal);
            query.setParameter("datainicial", inicio);
            query.setParameter("datafinal", fim);
        } catch (ParseException ex) {
            Logger.getLogger(Front.class.getName()).log(Level.SEVERE, null, ex);
        }

        List<Agendamento> agendamentos = query.list();
        sf.close();
        return agendamentos;
    }
}
